#ifndef HFT_MARKET_DATA_HANDLER_H
#define HFT_MARKET_DATA_HANDLER_H

#include "market_data_types.h"
#include <functional>
#include <vector>

namespace hft {

/**
 * @class MarketDataHandler
 * @brief 市场数据处理接口
 * 
 * 定义市场数据的回调接口和处理方法
 */
class MarketDataHandler {
public:
    using Callback = std::function<void(const MarketData&)>;
    
    virtual ~MarketDataHandler() = default;
    
    /**
     * @brief 订阅市场数据
     * @param symbols 要订阅的合约列表
     * @param callback 数据回调函数
     */
    virtual void subscribe(const std::vector<Symbol>& symbols, Callback callback) = 0;
    
    /**
     * @brief 取消订阅市场数据
     * @param symbols 要取消订阅的合约列表
     */
    virtual void unsubscribe(const std::vector<Symbol>& symbols) = 0;
    
    /**
     * @brief 处理市场数据更新
     * @param data 市场数据
     */
    virtual void onMarketData(const MarketData& data) = 0;
    
    /**
     * @brief 处理订单簿更新
     * @param order_book 订单簿数据
     */
    virtual void onOrderBook(const OrderBook& order_book) = 0;
    
    /**
     * @brief 处理成交数据
     * @param trade 成交数据
     */
    virtual void onTrade(const Trade& trade) = 0;
};

} // namespace hft

#endif // HFT_MARKET_DATA_HANDLER_H